package com.yulongtian.oneProblemEveryDay.month202302;

/**
 * https://leetcode.cn/problems/decrease-elements-to-make-array-zigzag/
 *
 * @author yulongTian
 * @create 2023-02-27 9:45
 */
public class Test22 {
    public static void main(String[] args) {
        int[] nums = {2, 1, 2, 1};
        System.out.println(movesToMakeZigzag(nums));
    }

    /**
     * 分别执行每种情况(偶数索引较大，奇数索引较大)。
     * 在偶数情况下，您应该减少每个偶数索引的元素，直到它低于它的直接邻居。
     *
     * @param nums
     * @return
     */
    public static int movesToMakeZigzag(int[] nums) {
        int len = nums.length;
        if (len == 1) {
            return 0;
        }
        if (len == 2) {
            return nums[0] == nums[1] ? 1 : 0;
        }
        //偶数索引较大
        int ans1 = 0;
        int[] nums_ou = nums.clone();
        if (nums_ou[0] <= nums_ou[1]) {
            ans1 += nums_ou[1] - nums_ou[0] + 1;
            nums_ou[1] = nums_ou[0] - 1;
        }
        for (int i = 2; i < len; i += 2) {
            if (i + 1 >= len) {
                break;
            }
            if (nums_ou[i] > nums_ou[i - 1] && nums_ou[i] > nums_ou[i + 1]) {
                continue;
            } else {
                if (nums_ou[i] <= nums_ou[i - 1]) {
                    ans1 += nums_ou[i - 1] - nums_ou[i] + 1;
                    nums_ou[i - 1] = nums_ou[i] - 1;
                }
                if (nums_ou[i] <= nums_ou[i + 1]) {
                    ans1 += nums_ou[i + 1] - nums_ou[i] + 1;
                    nums_ou[i + 1] = nums_ou[i] - 1;
                }
            }
        }
        if (len % 2 == 1 && nums_ou[len - 1] <= nums_ou[len - 2]) {
            ans1 += nums_ou[len - 2] - nums_ou[len - 1] + 1;
            nums_ou[len - 2] = nums_ou[len - 1] - 1;
        }


        //奇数索引较大
        int ans2 = 0;
        int[] nums_ji = nums.clone();
        for (int i = 1; i < len; i += 2) {
            if (i + 1 >= len) {
                break;
            }
            if (nums_ji[i] > nums_ji[i - 1] && nums_ji[i] > nums_ji[i + 1]) {
                continue;
            } else {
                if (nums_ji[i] <= nums_ji[i - 1]) {
                    ans2 += nums_ji[i - 1] - nums_ji[i] + 1;
                    nums_ji[i - 1] = nums_ji[i] - 1;
                }
                if (nums_ji[i] <= nums_ji[i + 1]) {
                    ans2 += nums_ji[i + 1] - nums_ji[i] + 1;
                    nums_ji[i + 1] = nums_ji[i] - 1;
                }
            }
        }
        if (len % 2 == 0 && nums_ji[len - 1] <= nums_ji[len - 2]) {
            ans2 += nums_ji[len - 2] - nums_ji[len - 1] + 1;
            nums_ji[len - 2] = nums_ji[len - 1] - 1;
        }
        return ans1 >= ans2 ? ans2 : ans1;
    }

}
